package com.ftg.learn.hashiyou.controller;

import freemarker.template.Configuration;
import freemarker.template.TemplateException;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * 哈石油大作业自动生成处理源码
 *
 * @author 布衣
 */
@RestController
public class BigWorkController {

    @Resource
    private Configuration freemarkerConfiguration;

    @GetMapping("/generate-report")
    public String generateReport(HttpServletResponse response) throws IOException {
        // 准备数据模型
        Map<String, Object> model = new HashMap<>();
        model.put("title", "学生成绩管理系统");
        model.put("professionalGrade", "2022级 计算机科学与技术");
        model.put("className", "计科一班");
        model.put("studentId", "202205440119");
        model.put("name", "司念");
        model.put("teacherName", "赵翔宇");
        model.put("operationCorrectness", 25); // 项目运行正确性分数
        model.put("structureCompleteness", 25); // 项目结构完整性分数
        model.put("contentCompleteness", 15); // 内容完整性分数
        model.put("typesettingStandard", 10); // 排版规范性分数
        model.put("contentCorrectness", 15); // 内容正确性分数
        model.put("functionExpansion", 10); // 功能扩充分数
        model.put("totalScore", 100); // 总分
        model.put("praiseOrCriticism", "非常不错"); // 总分
        model.put("teacherSignature", "老师"); // 总分
        model.put("b1", "老师"); // 总分
        model.put("b2", "老师"); // 总分
        model.put("b3", "老师"); // 总分
        model.put("b4", "老师"); // 总分
        model.put("b5", "老师"); // 总分


        // 渲染模板
        String html = null;
        try {

            // 获取模板
            freemarker.template.Template template = freemarkerConfiguration.getTemplate("Hashiyou.ftl");

            html = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);

            // 设置响应头
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
            response.setHeader("Content-Disposition", "attachment; filename=Hashiyou.docx");

            // 使用getOutputStream来写入二进制数据
            try (OutputStream out = response.getOutputStream()) {
                // 假设docxContent是你的.docx文件的字节内容
                out.write(html.getBytes());
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (TemplateException e) {
            throw new RuntimeException(e);
        }
        return "成功";
    }
}